MATLABweek3(图像视角下的矩阵运算)
存放次序
按照列存储
1710288199322
例题:构造矩阵A
1 2 3 4
| A=[2 3 4; 5 6 7]
A=[2:4;5:7]
|
常用矩阵构造函数
| zeros(m,n) |
生成m*n的全0矩阵 |
| ones(m,n) |
生成m*n的全1矩阵 |
| rand(m,n) |
在0-1之间均匀分布的随机矩阵 |
| randn(m,n) |
生成满足正态分布的随机矩阵 |
| eye(m,n) |
单位矩阵(仅主对角线元素全为1) |
使用图像举例
图像采用离散形式保存——矩阵
例如分辨率为1040*1920的彩色图像,可以由三个1024*1920矩阵保存,可以再得到一张二维的灰度矩阵,每个元素的范围是(未归一化0-255,对应黑-白,)
1 2 3 4 5
| image1 = imread("test_image.png"); image2 = rgb2gray(image1); imshow(image1) figure imshow(image2)
|
1710289642047
1710289948566
再使用size()命令,可以得到
1 2 3 4 5 6 7 8 9 10 11
| >>size(image1) >>ans =
1040 1920 3
>>size(image2) >>ans =
1040 1920
|
读取矩阵元素
- 全下标法,可以取一个或多个
- 单下标法,相当于c语言中高维数组实际上是线性存储的,可以将其线性展开(不介绍,注意matlab是按列保存的)
1 2 3
| a=image2(10,100) b=image2(10:100,10:100) imshow(b)
|
1710291057474
例子:取第10行到100行所有列
1 2 3 4
| c = image2(10:100,:);
imshow(c)
|
1710291216908
拼接
如果a,b为同型矩阵,使用[a,b]水平拼接,[a;b]为竖直拼接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| image1_1 = imread("test_image1.png"); image1_2 = rgb2gray(image1_1); image2_1 = imread("test_image2.png"); image2_2 = rgb2gray(image2_1); image1_3=image1_2(1:1035,:)
figure imshow(image1_3) figure imshow(image2_2)
image3 = [image1_3,image2_2] figure imshow(image3) image4 = [image1_3;image2_2] figure imshow(image4)
|
1710291928083
1710291867893
小练习:
把图像的某部分变黑
1 2 3 4
| tmp = image1_3; tmp(1:200,1:200)=0; figure imshow(tmp)
|
矩阵的加减可视化
1 2 3 4 5 6
| image5 = image1_3+image2_2 figure imshow(image5) image6 = image1_3-image2_2 figure imshow(image6)
|
1710292478774
矩阵的其他运算
- 求行列式值:det(a)
- 求矩阵的逆矩阵:inv(a)矩阵的除法,正反斜杠运算不同,但都相当于求逆相乘,见前章节
- 求秩:rank(a)
- 乘方^,开放sqrtm(a)
- 转置,transpose(a),只是转置,不是共轭转置
例:求方程组的解
1710292887489
小练习
1710294121703
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| clear close all clc
image1_1 = imread("test_image1.png"); image1_2 = rgb2gray(image1_1); image2_1 = imread("test_image2.png"); image2_2 = rgb2gray(image2_1); image1_3=image1_2(1:1035,:) I1=image1_3; I2=image2_2; I3=I2;
a1=I1(10,12); I1_PART=I1(100:200,100:200); I4=I2; I4(100,1:end)=0; I2_I3=[I2,I3]; I2_I3_=I2-I3;
figure imshow(I1) figure imshow(I4) figure imshow(I2_I3) figure imshow(I2_I3_)
|
运行结果
1710294166166
1710294321521
变量区主要看a的值;
注意figure2的黑线;
由于I3=I2,故figure4为全黑